package ink.xiaobaibai.serviceOxy.pay;


import ink.xiaobaibai.common.WxPayment;
import ink.xiaobaibai.serviceOxy.pay.impl.PayServiceImpl;

import java.math.BigDecimal;

/**
 * @description: 支付接口, 所有和钱相关的操作
 * @author: 小白白
 * @create: 2021-05-20
 **/

public interface IPayService {

    /**
     * 单次支付
     * 传入参数: 支付金额,用户id,机器id
     */
    public WxPayment onePay(BigDecimal amount, Integer userId, Integer deviceId);

    /**
     * 押金支付  押金金额,用户id
     * 注意多次支付押金,即又包月了一台,则押金表中多条记录即可,无需累加
     */
    public WxPayment depositPay(BigDecimal amount, Integer userId);

    /**
     * 新开通:包月支付
     * 携带业务员的id号
     */
    public WxPayment monthlyNewPay(BigDecimal amount, Integer userId, Integer adminUserId);

    /**
     * 续约:包月支付
     */
    public WxPayment monthlyContinuePay(BigDecimal amount, Integer userId, Integer deviceId);

    /**
     * 购买机器支付
     */
    public WxPayment buyPay(BigDecimal amount, Integer userId, Integer adminUserId);

    /**
     * 购买机器退款(后台用)
     */
    public boolean buyRefund(String orderId);

    /**
     * 获取响应请求中的加密数据,并对去进行解密
     */
    public PayServiceImpl.CallbackResult decryptPayResponseObj(String responseBody);

    /**
     * 处理回调消息
     */
    public boolean handleCallback(PayServiceImpl.CallbackResult callbackResult);


    /**
     * 押金退款(支付了押金,未进行支付包月专用) 无回调
     */
    public boolean refundByDepositIdWhitNoMon(String depositId);

    /**
     * 押金退款
     * 传入退款订单表主键
     */
    public boolean refundPayAmount(Integer refundDepositId);

}
